package br.com.bikes4bikers.model;

import java.util.Date;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Usuario {

	@Id
	@Column(unique = true, nullable = false)
	private String cpf;
	private String nome;
	private String sobreNome;
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date dataNascimento;
	@Embedded
	private Contato contato;
	@OneToOne(targetEntity = EnderecoUsuario.class,mappedBy="usuario", cascade = CascadeType.ALL)
	private EnderecoUsuario enderecoUsuario;
	@ManyToOne(targetEntity = PerfilSistema.class)
	private PerfilSistema perfil;
	private String senha;
	private byte[] imagem;
	
	/**
	 * @return the cpf
	 */
	public String getCpf() {
		return cpf;
	}
	/**
	 * @param cpf the cpf to set
	 */
	public void setCpf(String cpf) {
		this.cpf = cpf;
	}
	/**
	 * @return the nome
	 */
	public String getNome() {
		return nome;
	}
	/**
	 * @param nome the nome to set
	 */
	public void setNome(String nome) {
		this.nome = nome;
	}
	/**
	 * @return the sobreNome
	 */
	public String getSobreNome() {
		return sobreNome;
	}
	/**
	 * @param sobreNome the sobreNome to set
	 */
	public void setSobreNome(String sobreNome) {
		this.sobreNome = sobreNome;
	}
	/**
	 * @return the dataNascimento
	 */
	public Date getDataNascimento() {
		return dataNascimento;
	}
	/**
	 * @param dataNascimento the dataNascimento to set
	 */
	public void setDataNascimento(Date dataNascimento) {
		this.dataNascimento = dataNascimento;
	}
	/**
	 * @return the contato
	 */
	public Contato getContato() {
		return contato;
	}
	/**
	 * @param contato the contato to set
	 */
	public void setContato(Contato contato) {
		this.contato = contato;
	}
	/**
	 * @return the enderecoUsuario
	 */
	public EnderecoUsuario getEnderecoUsuario() {
		return enderecoUsuario;
	}
	/**
	 * @param enderecoUsuario the enderecoUsuario to set
	 */
	public void setEnderecoUsuario(EnderecoUsuario enderecoUsuario) {
		this.enderecoUsuario = enderecoUsuario;
	}
	/**
	 * @return the perfil
	 */
	public PerfilSistema getPerfil() {
		return perfil;
	}
	/**
	 * @param perfil the perfil to set
	 */
	public void setPerfil(PerfilSistema perfil) {
		this.perfil = perfil;
	}
	/**
	 * @return the senha
	 */
	public String getSenha() {
		return senha;
	}
	/**
	 * @param senha the senha to set
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}
	/**
	 * @return the imagem
	 */
	public byte[] getImagem() {
		return imagem;
	}
	/**
	 * @param imagem the imagem to set
	 */
	public void setImagem(byte[] imagem) {
		this.imagem = imagem;
	}

}
